package br.com.jk.produto;

import br.com.jk.empresa.Empresa;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.NaturalId;

/**
 * "Teste de alteração"
 *
 * @author camilo
 */
@Entity
@Table(name = ProdutoDao.NAME_TABLE, schema = ProdutoDao.NAME_SCHEMA)
public class Produto implements Serializable {

  public static final String ATTRIBUTE_ID = "id";
  public static final String ATTRIBUTE_CODEAN = "codEan";
  public static final String ATTRIBUTE_DESCRICAO = "descricao";
  public static final String ATTRIBUTE_EMBALAGEM = "embalagem";
  public static final String ATTRIBUTE_PRECO_VENDA = "precoVenda";
  public static final String ATTRIBUTE_ATIVO = "ativo";
  public static final String ATTRIBUTE_EMPRESA = "empresa";
  public static final String ATTRIBUTE_COD_MIXDB = "codMixdb";
  @Id
  @SequenceGenerator(name = ProdutoDao.NAME_SEQUENCE, sequenceName = ProdutoDao.NAME_SEQUENCE)
  @GeneratedValue(strategy = GenerationType.AUTO, generator = ProdutoDao.NAME_SEQUENCE)
  private int id;
  @NaturalId
  @Column(nullable = false, name = ProdutoDao.NAME_COLUMN_COD_EAN,length = 13)
  private String codEan;
  @Column(nullable = false, name = ProdutoDao.NAME_COLUMN_DESCRICAO)
  private String descricao;
  @Column(name=ProdutoDao.NAME_COLUMN_COMPLEMENTO)
  private String complemento;
  @Column(name = ProdutoDao.NAME_COLUMN_MARCA)
  private String marca;
  @Column(name = ProdutoDao.NAME_COLUMN_EMBALAGEM, length = 3)
  private String embalagem;
  @Column(name = ProdutoDao.NAME_COLUMN_PRECO_VENDA)
  private BigDecimal precoVenda;
  @Column(name = ProdutoDao.NAME_COLUMN_ATIVO)
  private boolean ativo;
  @Column(name = ProdutoDao.NAME_COLUMN_COD_MIXDB)
  private Integer codMixdb;
  @ManyToOne
  @JoinColumn(name = ProdutoDao.NAME_COLUMN_ID_EMPRESA, nullable = false)
  @ForeignKey(name = ProdutoDao.NAME_FK_PRODUTO_EMPRESA)
  private Empresa empresa;

  public String getComplemento() {
    return complemento;
  }

  public void setComplemento(String complemento) {
    this.complemento = complemento;
  }

  public String getMarca() {
    return marca;
  }

  public void setMarca(String marca) {
    this.marca = marca;
  }

  public Integer getCodMixdb() {
    return codMixdb;
  }

  public void setCodMixdb(Integer codMixdb) {
    this.codMixdb = codMixdb;
  }

  @Override
  public int hashCode() {
    int hash = 3;
    hash = 43 * hash + this.id;
    hash = 43 * hash + Objects.hashCode(this.codEan);
    hash = 43 * hash + Objects.hashCode(this.descricao);
    hash = 43 * hash + Objects.hashCode(this.embalagem);
    hash = 43 * hash + Objects.hashCode(this.precoVenda);
    hash = 43 * hash + (this.ativo ? 1 : 0);
    hash = 43 * hash + Objects.hashCode(this.codMixdb);
    hash = 43 * hash + Objects.hashCode(this.empresa);
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Produto other = (Produto) obj;
    if (this.id != other.id) {
      return false;
    }
    if (!Objects.equals(this.codEan, other.codEan)) {
      return false;
    }
    if (!Objects.equals(this.descricao, other.descricao)) {
      return false;
    }
    if (!Objects.equals(this.embalagem, other.embalagem)) {
      return false;
    }
    if (!Objects.equals(this.precoVenda, other.precoVenda)) {
      return false;
    }
    if (this.ativo != other.ativo) {
      return false;
    }
    if (!Objects.equals(this.codMixdb, other.codMixdb)) {
      return false;
    }
    if (!Objects.equals(this.empresa, other.empresa)) {
      return false;
    }
    return true;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getCodEan() {
    return codEan;
  }

  public void setCodEan(String codEan) {
    this.codEan = codEan;
  }

  public String getDescricao() {
    return descricao;
  }

  public void setDescricao(String descricao) {
    this.descricao = descricao;
  }

  public String getEmbalagem() {
    return embalagem;
  }

  public void setEmbalagem(String embalagem) {
    this.embalagem = embalagem;
  }

  public BigDecimal getPrecoVenda() {
    return precoVenda;
  }

  public void setPrecoVenda(BigDecimal precoVenda) {
    this.precoVenda = precoVenda;
  }

  public boolean isAtivo() {
    return ativo;
  }

  public void setAtivo(boolean ativo) {
    this.ativo = ativo;
  }

  public Empresa getEmpresa() {
    return empresa;
  }

  public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
  }
}
